package site.kason.netcamera.util;

import android.hardware.Camera;

import java.util.List;

//设置相机的对焦模式、预览格式和预览尺寸
public class CameraUtil {

    public static boolean setFocusMode(Camera.Parameters parameters, String mode) {
        //获取相机支持的对焦模式列表
        List<String> modes = parameters.getSupportedFocusModes();
        //检查目标模式是否在支持列表中。
        if (modes.contains(mode)) {
            parameters.setFocusMode(mode);
            return true;
        }
        //如果支持，则设置该模式并返回 true；否则返回 false。
        return false;
    }

    //设置相机的预览格式（支持多个备选格式）
    public static boolean setPreferredPreviewFormat(Camera.Parameters parameters, int... preferredFormat) {
        //获取相机支持的预览格式列表
        List<Integer> fmts = parameters.getSupportedPreviewFormats();
        //遍历备选格式，找到第一个支持的格式并设置。
        for (int pf : preferredFormat) {
            if (fmts.contains(pf)) {
                parameters.setPreviewFormat(pf);
                return true;
            }
        }
        //如果找到支持的格式，返回 true；否则返回 false。
        return false;
    }

    //设置相机的预览尺寸为最接近指定宽高的尺寸
    public static Camera.Size setNearSize(Camera.Parameters parameters, int preferWith, int preferHeight) {
        Camera.Size size = selectNearSize(parameters, preferWith, preferHeight);
        //调用 selectNearSize 方法选择合适的尺寸
        parameters.setPreviewSize(size.width, size.height);
        return size;
    }

    //选择最接近指定宽高的预览尺寸。
    public static Camera.Size selectNearSize(Camera.Parameters parameters, int preferWith, int preferHeight) {
        //获取相机支持的预览尺寸列表（按降序排列）。
        List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
        //遍历列表，返回第一个宽度和高度均不超过指定值的尺寸。
        for (Camera.Size size : sizes) {
            if (size.width <= preferWith && size.height <= preferHeight) {
                return size;
            }
        }
        //如果没有找到符合条件的尺寸，则返回列表中的最后一个尺寸（通常是最小尺寸）
        return sizes.get(sizes.size() - 1);
    }

}
